// 树形结构转扁平结构
export const treeToFlat = arr => {
  // 新的数组
  let result = []

  // 遍历
  for (const item of arr) {
    // 先克隆一份数据作为第一层级的填充(深拷贝)
    var res = JSON.parse(JSON.stringify(item))

    // 判断对象中是否有children字段, 有则删除 children 字段
    res['children'] && delete res['children']

    // 往 result 数组 添加 res 对象
    result.push(res)

    // 判断 遍历项的 children 字段是否为 数组并且其长度大于0
    if (item.children instanceof Array && item.children.length > 0) {
      // 循环递归遍历
      result = result.concat(treeToFlat(item.children))
    }
  }

  // 返回新数组
  return result
}

// 合并扁平化数组中相同的对象
export const getTwoDataList = dataList => {
  // 新数组
  let newDataList = []
  // 新对象
  let obj = {}
  // 菜名去重数组
  let titleList = [...new Set(dataList.map(t => t.title))]

  // 第一层循环, 循环菜名
  titleList.forEach(t => {
    // 定义对象新对象属性
    const attr = {
      title: '',
      poi: '',
      key: '',
      value: '',
    }

    // 第二层循环, 循环扁平化数组
    dataList.forEach(i => {
      // TODO: 如果扁平化数组的某一个对象的title属性等于菜名, 那么就给attr的属性赋值
      if (i.title === t) {
        // 标题
        attr['title'] = t
        // poi项 在一级菜单中没有, 所以需要判断
        i.poi ? attr['poi'] = attr['poi'] ? attr['poi'] + ',' + i.poi : i.poi : delete attr['poi']
        // 赋值key和value
        attr['key'] = attr['key'] ? attr['key'] + ',' + i.key : i.key
        attr['value'] = attr['value'] ? attr['value'] + ',' + i.value : i.value
      }
    })

    // 新的对象为
    obj = { ...attr }

    // 将对象push进新的数组
    newDataList.push(obj)
  })

  // 返回新数组
  return newDataList
}

// 再将扁平化数组转成树结构
export const getTreeAry = (dataList = []) => {
  let tree = []
  let newAry = []

  dataList.forEach(t => {
    if (t.poi) {
      newAry.push(t)
    } else {
      tree.push(t)
    }
  })

  tree.forEach(t => {
    let keys = t.key.split(',')[0]
    newAry.forEach(i => {
      if (i.key.includes(keys)) {
        t.children = [...t.children || [], i]
      }
    })
  })

  tree[1].children = [tree[1].children[1]]

  return tree
}


// 对二次封装得到的数组进行处理得到 返回一个数组
export const getTitleList = (valAry = [], dataList = []) => {
  // 双循环
  let titleAry = []

  let newValAry = valAry.join().split(',')

  dataList.forEach(t => {
    const tKey = t.key.split(',')
    newValAry.forEach(i => {
      for (const y of tKey) {
        if (y === i) {
          titleAry.push(t)
        }
      }
    })
  })

  titleAry = [...new Set(titleAry)]

  return titleAry
}
